package main

import "fmt"

type Jerson struct {
	id   int
	name string
}

func showJerson(person Jerson) {
	person.id = 1
	person.name = "jerson"
	fmt.Println(person)
}

func showJersonl(person *Jerson) {
	person.id = 1
	person.name = "jerson"
	fmt.Println(person)
}

func main() {
	//1、直接传递结构体，这是一个值拷贝(副本)，在函数内部不会改变外面结构体的内容
	jj := Jerson{2, "不改变"}
	fmt.Println(jj) //第一次结构体{2 不改变}
	showJerson(jj)  //调用函数传入新的结构体，函数内部的内容不变，{1 jerson}
	fmt.Println(jj) //外面结构体的内容不变，{2 不改变}

	//2、传递结构体指针，这时在函数体内部，可以改变外部结构体的内容
	kk := Jerson{3, "改变"}
	fmt.Println(kk)  //第一次结构体{3 改变}
	showJersonl(&kk) //&{1 jerson}
	fmt.Println(kk)  //外部结构体的内容就变成了函数内部的内容{1 jerson}
}
